// 手机号验证，使用第三方库
// 引入库
import mobileSchema from 'validate'
//实例化验证库
//验证手机号
const mobilevalidate = new mobileSchema({
  // 配置验证规则
  // 这里的验证名要和传入的验证名对应
  mobile: {
    type: String,
    match: /^1[3456789]\d{9}$/,
    required: true,
    message: '请输入正确的手机号'
  }

})
// 实例化验证库，验证验证码
const codevalidate = new mobileSchema({
  // 配置验证规则
  // 这里的验证名要和传入的验证名对应
  code: {
    type: String,
    match: /^\d{6}$/,
    required: true,
    message: '请输入正确的验证码'
  }

})
Page({
  data: {
    countDownVisible: false,
    mobile: '',//手机号双向绑定
    code: ''//验证码
  },
  onLoad(e) {
    this.setData({
      redirecturl: e.url

    })
    console.log(e);
  },
  // 
  countDownChange(ev) {
    this.setData({
      timeData: ev.detail,
      countDownVisible: ev.detail.minutes === 1 || ev.detail.seconds > 0,
    })
  },
  // 获取验证码
  async getcode() {

    const mobile = this.data.mobile
    // 验证手机号
    const errors = mobilevalidate.validate({ mobile: mobile })
    // 将需要验证的数据调用实例对象的validate方法赋值给验证规则里对应的属性名
    // 验证结束会返回一个数组,如果验证通过则为空数组
    // 验证不通过则数组有值并且有错误提示信息
    // 所以判断是否验证通过，只需要判断这个数组的长度
    if (errors.length) {
      // 如果验证不通过则提示用户
      wx.utils.toast(errors[0].message)
      return
    }
    const res = await wx.http.get(`code?mobile=${mobile}`,)
    console.log(res.data.code);
    // 开启倒计时
    this.setData({
      countDownVisible: true
    })
  },
  // 提交按钮
  async submitbtn() {
    //使用第三方库的方法验证手机号和验证码
    // 注意一个验证库的实例对象只能验证一个数据
    // 如果要验证多个就创建配置多个实例对象
    const mobile = this.data.mobile

    const codes = this.data.code
    // 验证手机号
    const errors = mobilevalidate.validate({ mobile: mobile })
    if (errors.length) {
      // 如果验证不通过则提示用户
      wx.utils.toast(errors[0].message)
      return
    }
    // 验证验证码
    const errcode = codevalidate.validate({ code: codes })
    if (errcode.length) {
      // 如果验证不通过则提示用户
      wx.utils.toast(errcode[0].message)
      return
    }
    // 通过验证
    // 发送请求
    const { code, data } = await wx.http.post('login', { mobile, code: codes })
    console.log(code);
    if (code !== 10000) return wx.utils.toast('登录失败')
    const app = getApp()
    app.setToken(data.token, data.refreshToken)
    // 登录成功后跳转到原本要访问的页面
    // 如果是从其他页面跳到登录页的
    // 就根据登录页获取到原本要访问的页面路径进行登录后跳转
    if (this.data.redirecturl) {

      // 在这里登录完成进行跳转使用的是navigateTo方法
      // 但是这个方法只能跳到非tabbar页面,如果是在修改用户资料页面跳转到这里
      // 就不能在登录完成后跳转到的tabar页面
      // 所以需要一个路由API,既能跳转到tabbar页面，也能跳转到非tabbar页面
      // switchTab 跳转到 tabBar 页面，并关闭其他所有非 tabBar 页面
      //navigateTo 保留当前页面，跳转到应用内的某个页面。但是不能跳到 tabbar 页面
      // wx.reLaunch 关闭所有页面，打开到应用内的某个页面
      wx.reLaunch({ url: this.data.redirecturl })
      // 如果没有来源页面
      // 就跳转到首页
    } else {
      wx.switchTab({
        url: '/pages/index/index'
      })
    }
    // 提示
    wx.utils.toast('登录成功')
  }
})
